|
1
|
|
|
/* global describe, it */ |
|
2
|
|
|
|
|
3
|
|
|
const assert = require('assert') |
|
4
|
|
|
const {exec} = require('child_process') |
|
5
|
|
|
const fs = require('fs') |
|
6
|
|
|
const path = require('path') |
|
7
|
|
|
const {minimizeJsonProperty} = require('../dist/jsonSnip.js') |
|
8
|
|
|
const {setInputType} = require('../dist/commonFuncs.js') |
|
9
|
|
|
|
|
10
|
|
|
const tests = [ |
|
11
|
|
|
{name: 'Simple 1', cmd: 'fsnip ./demo.json', resultFile: 'simple1.txt'}, |
|
12
|
|
|
{name: 'Simple 2', cmd: 'fsnip ./demo.json --json', resultFile: 'simple2.txt'}, |
|
13
|
|
|
{name: 'Simple 3', cmd: 'fsnip ./demo.json \t --json', resultFile: 'simple3.txt'}, |
|
14
|
|
|
{name: 'Prettify 1', cmd: 'fsnip ./demo.json --prettify', resultFile: 'prettify1.txt'}, |
|
15
|
|
|
{name: 'Prettify 2', cmd: 'fsnip ./demo.json --prettify 2 infinity', resultFile: 'prettify2.txt'}, |
|
16
|
|
|
{name: 'Prettify 3', cmd: 'fsnip ./demo.json --prettify 3 0', resultFile: 'prettify3.txt'}, |
|
17
|
|
|
{name: 'Prettify 4', cmd: 'fsnip ./demo.json --prettify 3 45 true', resultFile: 'prettify4.txt'}, |
|
18
|
|
|
{name: 'Prettify 5', cmd: 'fsnip ./demo.json --prettify 3 45 300', resultFile: 'prettify5.txt'}, |
|
19
|
|
|
{name: 'Ellipsify 1', cmd: 'fsnip ./demo.json --ellipsify method', resultFile: 'ellipsify1.txt'}, |
|
20
|
|
|
{name: 'Ellipsify 2', cmd: 'fsnip ./demo.json --ellipsify', resultFile: 'ellipsify2.txt'}, |
|
21
|
|
|
{name: 'Snip', cmd: 'fsnip ./demo.json --snip $..currentRadius', resultFile: 'snip.txt'}, |
|
22
|
|
|
{name: 'Snip 2', cmd: 'fsnip ./demo.json --snip "\'$..currentRadius\'"', resultFile: 'snip.txt'}, |
|
23
|
|
|
{name: 'Complex 1', cmd: 'fsnip ./demo.json --snip notifications --ellipsify gnss currentRadius ~method ~state ~message', resultFile: 'complex1.txt'}, |
|
24
|
|
|
{name: 'Complex 2', cmd: 'fsnip ./demo.json --snip navigation --ellipsify gnss ~method ~state ~message --ellipsify currentRadius ~"\'\\$source\'"', resultFile: 'complex2.txt'}, |
|
25
|
|
|
{name: 'delKeys', cmd: 'fsnip ./demo.json --ellipsify $ ~vessels --delKeys navigation --ellipsify uuid', resultFile: 'delKeys.txt'}, |
|
26
|
|
|
{name: 'delKeys 2', cmd: 'fsnip ./demo.json --delKeys $..method[0]', resultFile: 'delKeys2.txt'}, |
|
27
|
|
|
{name: 'delKeys 3', cmd: 'fsnip ./demo.json --delKeys "\'$..method[0]\'"', resultFile: 'delKeys2.txt'}, |
|
28
|
|
|
{name: 'Snip error 1', cmd: 'fsnip ./demo.json --snip', resultFile: 'snipError1.txt'}, |
|
29
|
|
|
{name: 'Snip error 2', cmd: 'fsnip ./demo.json --snip navigation 2', resultFile: 'snipError2.txt'}, |
|
30
|
|
|
{name: 'Snip error 3', cmd: 'fsnip ./demo.json --snip navigation -2', resultFile: 'snipError3.txt'}, |
|
31
|
|
|
{name: 'Snip error 4', cmd: 'fsnip ./demo.json --snip navigation Fred', resultFile: 'snipError4.txt'}, |
|
32
|
|
|
{name: 'Invalid 1', cmd: 'fsnip ./demo.json --notacmd', resultFile: 'invalid1.txt'}, |
|
33
|
|
|
{name: 'Invalid 2', cmd: 'fsnip ./demo.json --snip navigation --from method', resultFile: 'invalid2.txt'}, |
|
34
|
|
|
{name: 'Invalid 3', cmd: 'fsnip ./demo.json navigation', resultFile: 'invalid3.txt'}, |
|
35
|
|
|
{name: 'Invalid 4', cmd: 'fsnip ./demo.json --from vessels --json', resultFile: 'invalid4.txt'}, |
|
36
|
|
|
{name: 'Invalid 5', cmd: 'fsnip ./demo.json --from vessels --prettify', resultFile: 'invalid5.txt'}, |
|
37
|
|
|
{name: 'Invalid 6', cmd: 'fsnip ./demo.json --from vessels --ellipsify method', resultFile: 'invalid6.txt'}, |
|
38
|
|
|
{name: 'Invalid 7', cmd: 'fsnip ./demo.json --from vessels --snip notifications', resultFile: 'invalid7.txt'}, |
|
39
|
|
|
{name: 'Invalid 8', cmd: 'fsnip ./demo.json --from vessels --delKeys $..method[0]', resultFile: 'invalid8.txt'}, |
|
40
|
|
|
{name: 'Invalid 9', cmd: 'fsnip ./demo.json --delKeys $..method[0] --from vessels', resultFile: 'invalid9.txt'}, |
|
41
|
|
|
{name: 'Invalid 10', cmd: 'fsnip ./demo.json --delKeys $..method[0] --to vessels', resultFile: 'invalid10.txt'}, |
|
42
|
|
|
{name: 'Text 1', cmd: 'fsnip ./demo.txt --from "\'#loc1_start\'"', resultFile: 'text1.txt'}, |
|
43
|
|
|
{name: 'Text 1a', cmd: 'fsnip ./demo.txt --from \'"#loc1_start"\'', resultFile: 'text1.txt'}, |
|
44
|
|
|
{name: 'Text 2', cmd: 'fsnip ./demo.txt --start "\'#loc1_start\'"', resultFile: 'text2.txt'}, |
|
45
|
|
|
{name: 'Text 3', cmd: 'fsnip ./demo.txt --to "\'#loc1_end\'"', resultFile: 'text3.txt'}, |
|
46
|
|
|
{name: 'Text 4', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'"', resultFile: 'text4.txt'}, |
|
47
|
|
|
{name: 'Text 5', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'" 2', resultFile: 'text5.txt'}, |
|
48
|
|
|
{name: 'Text 6', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'" -2', resultFile: 'text6.txt'}, |
|
49
|
|
|
{name: 'Text 7', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'" 3', resultFile: 'text7.txt'}, |
|
50
|
|
|
{name: 'Text 8', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'" 2 3', resultFile: 'text8.txt'}, |
|
51
|
|
|
{name: 'Text 9', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'" fred', resultFile: 'text9.txt'}, |
|
52
|
|
|
{name: 'Text 10', cmd: 'fsnip ./demo.txt --finish "\'#loc1_end\'" fred bert', resultFile: 'text10.txt'}, |
|
53
|
|
|
{name: 'Text 11', cmd: 'fsnip ./demo.txt --start "\'#loc1_end\'" -2', resultFile: 'text11.txt'}, |
|
54
|
|
|
{name: 'Text 12', cmd: 'fsnip ./demo.txt --start "\'#loc1_end\'" 3', resultFile: 'text12.txt'}, |
|
55
|
|
|
{name: 'Text 13', cmd: 'fsnip ./demo.txt --start "\'#loc1_end\'" 2 3', resultFile: 'text13.txt'}, |
|
56
|
|
|
{name: 'Text 14', cmd: 'fsnip ./demo.txt --start "\'#loc1_end\'" fred', resultFile: 'text14.txt'}, |
|
57
|
|
|
{name: 'Text 15', cmd: 'fsnip ./demo.txt --start "\'#loc1_end\'" fred bert', resultFile: 'text15.txt'}, |
|
58
|
|
|
{name: 'Text 16', cmd: 'fsnip ./demo.txt --start "\'this text\'"', resultFile: 'text16.txt'}, |
|
59
|
|
|
{name: 'Text 17', cmd: 'fsnip ./demo.txt --from "\'#loc1_end\'" fred', resultFile: 'text17.txt'}, |
|
60
|
|
|
{name: 'Text 18', cmd: 'fsnip ./demo.txt --to "\'#loc1_end\'" fred', resultFile: 'text18.txt'}, |
|
61
|
|
|
{name: 'Help', cmd: 'fsnip --help', resultFile: 'help.txt'}, |
|
62
|
|
|
{name: 'Tricky 1', cmd: 'fsnip ./test/tricky.json --ellipsify address ~housename', resultFile: 'tricky1.txt'}, |
|
63
|
|
|
{name: 'Tricky 2', cmd: 'fsnip ./test/tricky.json --ellipsify address ~"\'street name\'"', resultFile: 'tricky2.txt'}, |
|
64
|
|
|
{name: 'Tricky 3', cmd: 'fsnip ./test/tricky.json --ellipsify address ~"\'~post code\'"', resultFile: 'tricky3.txt'}, |
|
65
|
|
|
{name: 'Dollar 1', cmd: 'fsnip ./test/dollar1.json --ellipsify "\'$..[\'\\$source\']\'"', resultFile: 'dollar1.txt'} |
|
66
|
|
|
] |
|
67
|
|
|
|
|
68
|
|
|
const errorTests = [ |
|
69
|
|
|
{name: 'Error 1', cmd: 'fsnip ./fred.fred --snip navigation', stderr: 'unable to read file \'./fred.fred\'\n'}, |
|
70
|
|
|
{name: 'Error 2', cmd: 'fsnip ./fred.fred --snip', stderr: 'unable to read file \'./fred.fred\'\n'}, |
|
71
|
|
|
{name: 'Error 3', cmd: 'fsnip ./fred.fred', stderr: 'unable to read file \'./fred.fred\'\n'}, |
|
72
|
|
|
{name: 'Error 4', cmd: 'fsnip', stderr: 'Unrecognised arguments passed to fsnip. See fsnip --help\n'} |
|
73
|
|
|
] |
|
74
|
|
|
|
|
75
|
|
|
describe('unit tests', function () { |
|
76
|
|
|
it('setInputType 1', function () { |
|
77
|
|
|
assert.equal(setInputType({}, 'invalidType'), false) |
|
78
|
|
|
}) |
|
79
|
|
|
it('setInputType 2', function () { |
|
80
|
|
|
assert.equal(setInputType({}, ''), false) |
|
81
|
|
|
}) |
|
82
|
|
|
it('setInputType 3', function () { |
|
83
|
|
|
assert.equal(setInputType({type: ''}, ''), false) |
|
84
|
|
|
}) |
|
85
|
|
|
it('setInputType 4', function () { |
|
86
|
|
|
assert.equal(setInputType({type: 'something'}, 'somethingElse'), false) |
|
87
|
|
|
}) |
|
88
|
|
|
it('minimizeJsonProperty', function () { |
|
89
|
|
|
let testJson = {'first': true} |
|
90
|
|
|
minimizeJsonProperty(testJson, 'first') |
|
91
|
|
|
assert.deepEqual(testJson, {'first': true}) |
|
92
|
|
|
}) |
|
93
|
|
|
}) |
|
94
|
|
|
|
|
95
|
|
|
describe('fsnip tests', function () { |
|
96
|
|
|
for (let i = 0; i < tests.length; i++) { |
|
97
|
|
|
it(tests[i].name, function (done) { |
|
98
|
|
|
this.timeout(8000) |
|
99
|
|
|
exec(tests[i].cmd, function (error, stdout) { |
|
100
|
|
|
assert.ifError(error) |
|
101
|
|
|
assert.equal(stdout.toString(), fs.readFileSync(path.resolve('./test/', tests[i].resultFile)).toString()) |
|
102
|
|
|
done() |
|
103
|
|
|
}) |
|
104
|
|
|
}) |
|
105
|
|
|
} |
|
106
|
|
|
for (let i = 0; i < errorTests.length; i++) { |
|
107
|
|
|
it(errorTests[i].name, function (done) { |
|
108
|
|
|
this.timeout(8000) |
|
109
|
|
|
exec(errorTests[i].cmd, function (error, stdout, stderr) { |
|
110
|
|
|
assert.ifError(error) |
|
111
|
|
|
assert.equal(stderr.toString(), errorTests[i].stderr) |
|
112
|
|
|
done() |
|
113
|
|
|
}) |
|
114
|
|
|
}) |
|
115
|
|
|
} |
|
116
|
|
|
}) |
|
117
|
|
|
|